package demo1;

import java.util.Arrays;

/**
 * @Author liangzai
 * @Description:
 */
public class Training {
    //找出区分值
    public int findValueOfPartition(int[] nums) {
        int n = nums.length;
        Arrays.sort(nums);
        int min = Integer.MAX_VALUE;
        for (int i = 1; i < n; i++) {
            min = Math.min(min,Math.abs(nums[i]-nums[i-1]));
        }
        return min;
    }

    //找出有效子序列的最大长度2
//    public int maximumLength2(int[] nums, int k) {
//        int n = nums.length;
//        int[] dp = new int[n];
//        for (int i = 0; i < n; i++) {
//            dp[i] = nums[i]%k;
//        }
//        int[][] count = new int[n][k];
//        count[0][dp[0]%k] = 1;
//        for (int i = 1; i < n; i++) {
//
//        }
//    }

    public int maximumLength(int[] nums){
        return maximumLength(nums,2);
    }

    public int maximumLength(int[] nums, int k) {
        int L = nums.length;
        int res = 0;
        {
            int[] cs = new int[k];
            for(int i=0; i<L; i++) {
                cs[(nums[i] %= k)]++;
            }
            for(int c : cs) {
                res = Math.max(res,  c);
            }
        }
        int[] dp = new int[k*k];
        for(int v : nums) {
            int ki = v*k;
            int ni = v;
            for(int n=0; n<k; n++,ki++,ni+=k) {
                if(n != v) {
                    res = Math.max(res, dp[ki] = 1 + dp[ni]);
                }
            }
        }
        return res;
    }
}








